
Ext.define("NotesApp.controller.NotesListController", {
	
    extend: "Ext.app.Controller",	// 继承
    
    config: {
    		// 控制器加载应用中的组件
        refs: {
        	
        		// 实例?
        		// 新增按钮
            newNoteBtn: "#new-note-btn", 				// 使用id找到view。
            // 列表页面
            notesListContainer: "noteslistcontainer",	// 使用xtype找到view而不是id
            // 编辑页面
            noteEditor: "noteeditor"
        },
        // 控制器加载组件中的事件
        control: {
        	
            newNoteBtn: {
                tap	: "onNewNote" //单击事件
            },
            
            notesListContainer:{
            	
                newNoteCommand 	: "onNewNoteCommand", 		// 自定义事件
                editNoteCommand : "onEditNoteCommand"		// 自定义事件
                
            },
            
            noteEditor : {
            	
            		saveNoteCommand 		: "onSaveNoteCommand",
            		backToHomeCommand	: "onBackToHomeCommand",
            		deleteNoteCommand 	: "onDeleteNoteCommand"
            },
        }
    },
    

    /************************
     *                     	*
     *      通用方法         *
     *                      *
     ************************/
	// 随机数
    getRandomInt: function (min, max) {
	    return Math.floor(Math.random() * (max - min + 1)) + min;
	},
	
	
	
	/************************
     *                     	*
     *        动画           *
     *                      *
     ************************/
    
    // 弹出 编辑页面
	activateNoteEditor: function (record) {
		
		// 编辑页面
	    var noteEditor = this.getNoteEditor();
	    noteEditor.setRecord(record); // load() is deprecated.
	    Ext.Viewport.animateActiveItem(noteEditor, this.slideLeftTransition);
	},
	
	// 返回 主界面
	activateNotesList: function () {
	    Ext.Viewport.animateActiveItem(this.getNotesListContainer(), this.slideRightTransition);
	},
    
    // 编辑页出现动画
	slideLeftTransition: { type: 'slide', direction: 'left' },
	
	// 编辑页消失动画
	slideRightTransition: { type: 'slide', direction: 'right' },
	
	
	
	/************************
     *                     	*
     *      响应事件         *
     *                      *
     ************************/
	// 响应 单击事件
    onNewNote: function () {
    		console.log("单击事件:新增");
	},
	
	// 响应 新增事件
	onNewNoteCommand: function () {

        console.log("通知事件:新增");
        
        var now = new Date();
	    var noteId = (now.getTime()).toString() + (this.getRandomInt(0, 100)).toString();
	
	    var newNote = Ext.create("NotesApp.model.Note", {
	        id: noteId,
	        dateCreated: now,
	        title: "新联系人",
	        narrative: "描述"
	    });
	
	    this.activateNoteEditor(newNote);
        
    },

	// 响应编辑事件
    onEditNoteCommand: function (list, record) {

        console.log("通知事件:编辑");
        
        this.activateNoteEditor(record);
    },
    
    // 响应返回事件
    onBackToHomeCommand: function () {

		console.log("通知事件:返回");
		this.activateNotesList();
	},
    
    // 响应保存事件
    onSaveNoteCommand: function () {

	    console.log("通知事件:保存");
	
	    var noteEditor = this.getNoteEditor();
	
	    var currentNote = noteEditor.getRecord();
	    var newValues = noteEditor.getValues();
	
	    // 更新对象值
	    currentNote.set("title", newValues.title);
	    currentNote.set("narrative", newValues.narrative);
	
		// 验证数据
	    var errors = currentNote.validate();
	
		// 异常
	    if (!errors.isValid()) {
	        Ext.Msg.alert('Wait!', errors.getByField("title")[0].getMessage(), Ext.emptyFn);
	        currentNote.reject();
	        return;
	    }
	
		// 得到数据库文件
	    var notesStore = Ext.getStore("Notes");
	
		// 查找当前数据库中是否存在这条记录
	    if (null == notesStore.findRecord('id', currentNote.data.id)) {
	    		// 不存在则添加
	        notesStore.add(currentNote);
	    }
		// 保存
	    notesStore.sync();
		
		// 排序
	    notesStore.sort([{ property: 'dateCreated', direction: 'DESC'}]);
	
		// 返回主界面
	    this.activateNotesList();
	},
	
	// 响应删除事件 
	onDeleteNoteCommand: function () {

	    console.log("通知事件:删除");
	
	    var noteEditor = this.getNoteEditor();
	    var currentNote = noteEditor.getRecord();
	    var notesStore = Ext.getStore("Notes");
	
	    notesStore.remove(currentNote);
	    notesStore.sync();
	
		// 返回主界面
	    this.activateNotesList();
	},


	


    launch: function () {
        this.callParent(arguments);
        Ext.getStore("Notes").load();
        console.log("launch");
    },
    
    init: function () {
        this.callParent(arguments);
        console.log("init");
    },
});